/*
 * Copyright 2000-2020 ALPHA LAB.Inc All Rights Reserved.
 */
package com.alphalab.framework.context; 

import java.io.Serializable;
import java.util.List; 
import com.alphalab.framework.domain.IValueObject;
import com.alphalab.framework.domain.dto.ResultVO;
import com.alphalab.framework.domain.dto.SingleResultVO; 

/**
 * 定义GeneralContext的基本方法.
 * 与IGeneralRole保持一致
 * @param <VO>
 * @author allen
 * @version 1.0.0 2017年8月16日
 */
public interface IGeneralContext<VO extends IValueObject> extends IContext { 
	
	/**
	 * 保存VO对象.
	 * @param valueObject VO对象
	 * @return ResultVO
	 */
	ResultVO save(VO valueObject);
	
	/**
	 * 保存VO对象集合.
	 * @param valueObjects VO对象集合
	 * @return ResultVO
	 */
	ResultVO saveList(List<VO> valueObjects);	
	
	/**
	 * 删除VO对象.
	 * @param valueObject VO对象
	 * @return ResultVO
	 */
	ResultVO delete(VO valueObject);
	
	/**
	 * 删除VO对象.
	 * @param id 主键
	 * @return ResultVO
	 */
	ResultVO deleteById(Serializable id);
	
	/**
	 * 删除VO对象集合.
	 * @param valueObjects VO对象集合
	 * @return ResultVO
	 */
	ResultVO deleteList(List<VO> valueObjects);	
	
	/**
	 * 更新VO对象.
	 * @param valueObject VO对象
	 * @return ResultVO
	 */
	ResultVO update(VO valueObject);
	
	/**
	 * 更新VO对象集合.
	 * @param valueObjects VO对象集合
	 * @return ResultVO
	 */
	ResultVO updateList(List<VO> valueObjects);	
	
	/**
	 * 保存或更新VO对象.
	 * @param valueObject VO对象
	 * @return ResultVO
	 */
	ResultVO saveOrUpdate(VO valueObject);	
	
	/**
	 * 保存或更新VO对象集合.
	 * @param valueObjects VO对象集合
	 * @return ResultVO
	 */
	ResultVO saveOrUpdateList(List<VO> valueObjects);		
	
	/**
	 * 根据主键返回对象.
	 * @param id 主键
	 * @return VO
	 */
	SingleResultVO<VO> find(Serializable id);
	
}
